/*
����չ2���������Ķ����final

����ĳ����o�����o�����Է����ı䣬��Ӱ������ʹ��
�������o�������һ�������������Ķ������ı�
Ӧ�ñ��⽫������������ñ������Ķ���

 */
package jdx_10_使用锁的注意事项;

import java.util.concurrent.TimeUnit;


public class SyncSameObject {

	/*final*/ Object o = new Object(); //加锁的时候，一定要把对象固定住

	void m() {
		synchronized(o) {
			while(true) {
				try {
					TimeUnit.SECONDS.sleep(1);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName());


			}
		}
	}

	public static void main(String[] args) {
		SyncSameObject t = new SyncSameObject();
		//启动第一个线程
		new Thread(t::m, "t1").start();

		try {
			TimeUnit.SECONDS.sleep(3);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//创建第二个线程
		Thread t2 = new Thread(t::m, "t2");

		t.o = new Object(); //锁对象发生改变，所以t2线程得以执行，如果注释掉这句话，线程2将永远得不到执行机会

		t2.start();

	}



}
